- 安装build和运行环境依赖
1 | # Install the latest OpenJDK. |
- 编译 mesos
1 | Change working directory. |
其中遇到的问题
对于找不到jar的处理: http://www.linuser.com/thread-2057-1-1.html
- 生成运行框架(例子)
1 | # Run test suite. |
安装/运行 zookeeper
- 下载安装包 (其实这一步是不需要的,因为mesos的build 中集成了zookeeper,
参见 https://mesosphere.com/blog/2013/08/01/distributed-fault-tolerant-framework-apache-mesos-html/
其中的介绍, 可以直接进入 /build/3rdparty/zookeeper-3.4.*, 调到步骤2)
1 | wget http://apache.fayea.com/zookeeper/stable/zookeeper-3.4.9.tar.gz |
- 创建 conf/zoo.cfg
1 | tickTime=2000 |
- 启动zookeeper in standalone mode
1 | $ bin/zkServer.sh start |
- 验证zookeeper 可以正常工作
1 | $ bin/zkCli.sh -server 127.0.0.1:2181 |
运行 help , ls / 命令等
对于安装zookeeper 后,mesos需要向zookeeper注册,所以原来的mesos 启动的命令需要修改如下:
1 | $ ./bin/mesos-master.sh --zk=zk://localhost:2181/mesos --work_dir=/var/lib/mesos --quorum=1 |
应用docker containerizers,为了使用docker 容器化,我们需要使用 –containerizers=docker,mesos
主要是 agent 启动参数修改,具体如下:
1 | sudo ./bin/mesos-agent.sh --master=zk://localhost:2181/mesos --work_dir=/var/lib/mesos --containerizers=docker,mesos |
因为agent 修改了,启动时候可能报错,执行以下 sudo rm -rf /var/lib/mesos/meta/slaves/latest
就行了
安装/运行 marathon
- 安装有两种方式,一种是源码安装,另外一个是release tarball 安装
1 | - option1:build from source |
- 启动marathon
1 | $ sudo MESOS_NATIVE_JAVA_LIBRARY=/home/kennan/mesos-1.0.1/build/src/.libs/libmesos-1.0.1.so ./bin/start --master zk://localhost:2181/mesos --zk zk://localhost:2181/marathon |
如果mesos没有注册到zookeeper 也就是 standalone mode 方式,比如 local 方式 或者 http://host:port ,命令如下:
1 | $ sudo MESOS_NATIVE_JAVA_LIBRARY=/home/kennan/mesos-1.0.1/build/src/.libs/libmesos-1.0.1.so ./bin/start --master local --zk zk://localhost:2181/marathon |
使用Unified Containerizer
为了减少对docker dameon的依赖,mesos引入了unified containerizer,通过对docker registry 的curl请求, 内部的isolators需要开启来支持对应的隔离。(取代docker的对于容器创建隔离的部分)。所以,为了使用这个功能,相应的agent运行的命令修改如下:
1 | sudo ./bin/mesos-agent.sh --master=zk://localhost:2181/mesos --work_dir=/var/lib/mesos --containerizers=mesos --image_providers=appc,docker --isolation=filesystem/linux,docker/runtime |
测试:
1 | /mesos-1.0.1/build/src$ sudo ./mesos-execute --master=localhost:5050 --name=test --docker_image=library/redis --shell=false |
比如,我们运行nginx,不在使用默认image里的entrypoint和cmd,而是这里自己制定:
1 | sudo ./mesos-execute --master=localhost:5050 --name=test2 --docker_image=library/nginx --shell=true --command="nginx -g 'daemon off;'" |
访问 http://127.0.0.1/ 就可以看到nginx 页面了
更多参考资料:
- http://mesos.apache.org/documentation/latest/operational-guide/
- mesos containerizers
http://mesos.apache.org/documentation/latest/containerizer/ - zookeeper 介绍
http://zookeeper.apache.org/doc/trunk/zookeeperStarted.html - Unified Containerizer
https://github.com/apache/mesos/blob/master/docs/container-image.md